# coding: utf-8
#Lists are used to store multiple items in a single variable.

lista = ["apple", "banana", "cherry"]
listb =  ["pear","kiwi","watermelon"]
print(lista, listb)

lista.append(listb[0])
print(lista)
input()

# for loop
for x in lista:
  print(x)
  listb.append(x)
print(listb)
input()

# for loop
i = -1
print(listb)
for x in listb:
    i += 1    
    if x == "pear" and i > 0 :
        listb[i] = "coconut"

print(listb)

#文字列のsplitからリストへ

address = "熊本県 阿蘇郡 南阿蘇村 河陽 4518"
adrlist = address.split(' ')
print(adrlist)

phone = "0967-65-8021"
phonelist = phone.split('-')
print(phonelist)

import copy
import os
os.system("clear")

#元データ
lista = [0, 1, [2, 3]]
#print(lista[0],lista[1],lista[2],lista[2][0],lista[2][1])

listb = lista                   # assignment代入

listc = lista.copy()              # shallow copy

listd = copy.deepcopy(lista)  # deep copy

print(lista,listb,listc,listd)

# [0, 1, [2, 3]]
lista[1] = 100
lista[2][0] = 200

print(lista,listb,listc,listd)

a = ["apple","banana","kiwi","orange"]
b = a
c = a.copy()
d = copy.deepcopy(a)
print(a,b,c,d)
a[1] = "バナナ"
print(a,b,c,d)

#リスト内包表記
base = [1,2,3,4]
new = [i*2 for i in base]
print(new)

#リスト要素の削除clear, pop, remove, del
#2種類のリスト:①棚stack FILO First In Last Out
#FCLS  First Come Last service 

import random
stack =[]

for i in range(10):
    stack.append(random.randint(2,50))
print(stack)
result = 0
for i in range(10):
    result += stack.pop()
print(f'総和={result}') 
print(stack)

#②待ち行列QUEUE:FIFO First In First Out 
#FCFS First Come First service

queue = []
for i in range(10):
    name = input("お名前は: ")
    queue.append(name)
print(queue) 

for i in range(10):
    call = queue.pop(0)
    print(call)

#
#リスト要素の削除clear, pop, remove, del
#使い方一覧


#すべての要素を削除: clear()
l = [0, 1, 2]

l.clear()
print(l)
# []


#指定した位置の要素を削除し、値を取得: pop()
l = [0, 10, 20, 30, 40, 50]

popped_item = l.pop(0)
print(popped_item)
# 0

print(l)
# [10, 20, 30, 40, 50]

popped_item = l.pop(3)
print(popped_item)
# 40

print(l)
# [10, 20, 30, 50]

popped_item = l.pop(-2)
print(popped_item)
# 30

print(l)
# [10, 20, 50]
popped_item = l.pop()
print(popped_item)
# 50

print(l)
# [10, 20]



#指定した値と同じ要素を検索し、最初の要素を削除: remove()
l = ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']

l.remove('Alice')
print(l)
# ['Bob', 'Charlie', 'Bob', 'Dave']

#インデックス・スライスで位置・範囲を指定して削除: del
l = [0, 10, 20, 30, 40, 50]

del l[0]
print(l)
# [10, 20, 30, 40, 50]

del l[3]
print(l)
# [10, 20, 30, 50]

del l[-1]
print(l)
# [10, 20, 30]

del l[-2]
print(l)
# [10, 30]

#スライスで範囲を指定すると、複数の要素を一括で削除できる。
l = [0, 10, 20, 30, 40, 50]
del l[2:5]
print(l)
# [0, 10, 50]

l = [0, 10, 20, 30, 40, 50]
del l[:3]
print(l)
# [30, 40, 50]

l = [0, 10, 20, 30, 40, 50]
del l[-2:]
print(l)
# [0, 10, 20, 30]

#全範囲を指定してすべての要素を削除する
l = [0, 10, 20, 30, 40, 50]
del l[:]
print(l)
# []

#スライスでの範囲指定を[start:stop:step]として増分stepを指定すると、飛び飛びの複数の要素を一括で削除できる。
l = [0, 10, 20, 30, 40, 50]
del l[::2]
print(l)
# [10, 30, 50]

#条件を満たす複数の要素を一括で削除: リスト内包表記
l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

evens = [i for i in l if i % 2 == 0]
print(evens)
# [0, 2, 4, 6, 8]

odds = [i for i in l if i % 2 != 0]
print(odds)
# [1, 3, 5, 7, 9]

print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


l = ['Alice', 'Bob', 'Charlie', 'Bob', 'David']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'David']

print([s for s in l if s != 'Bob'])
# ['Alice', 'Charlie', 'David']

print([s for s in l if s.endswith('e')])
# ['Alice', 'Charlie']

print(list(set(l)))
# ['Alice', 'Charlie', 'David', 'Bob']